<template>
	<view>
		<button @click="requestSubscribe">订阅消息</button>
		<button @click="notifyBackend">发送订阅消息</button>
	</view>
</template>

<script>
	import { http } from '../../utils/requestUtil';

	export default {
		data() {
			return {
				// 模板ID单独存储，方便维护
				templateId: 'nOBpWMAyW_l91hC1YmG_9Bme8zgEYBvEl8d7e0Con7w'
			}
		},
		methods: {
			// 1. 申请订阅消息授权
			requestSubscribe() {
				uni.requestSubscribeMessage({
					tmplIds: [this.templateId], // 模板ID数组
					success: (res) => {
						// 判断用户授权状态
						if (res[this.templateId] === 'accept') {
							uni.showToast({
								title: '订阅成功',
								icon: 'success'
							});
						} else if (res[this.templateId] === 'reject') {
							uni.showToast({
								title: '已拒绝订阅，可在设置中重新开启',
								icon: 'none',
								duration: 3000
							});
						} else {
							uni.showToast({
								title: '订阅取消',
								icon: 'none'
							});
						}
					},
					fail: (err) => {
						console.error('订阅请求失败：', err);
						uni.showToast({
							title: '订阅失败，请稍后重试',
							icon: 'none'
						});
					}
				});
			},

			// 2. 通知后端发送订阅消息
			notifyBackend() {
				// 先获取登录凭证code
				uni.login({
					success: (loginRes) => {
						if (loginRes.code) {
							// 调用后端接口发送订阅消息
							http.post("/bole/sendSubscribeMessage", {
								code: loginRes.code, // 用于后端获取openid（如果需要）
								templateId: this.templateId, // 模板ID
								data: {
									"number1": "50", // 修正：去掉空格，确保纯数字
									"number2": "150",
									"time3": "2024-07-15 10:30:00",
									"thing4": "您的账户获得了50积分奖励"
								}
							}).then((res) => {
								if (res.code === 200) {
									uni.showToast({
										title: '消息发送成功',
										icon: 'success'
									});
								} else {
									uni.showToast({
										title: '消息发送失败：' + res.msg,
										icon: 'none'
									});
								}
							}).catch((err) => {
								console.error('请求后端失败：', err);
								uni.showToast({
									title: '网络错误，请稍后重试',
									icon: 'none'
								});
							});
						} else {
							console.error('获取code失败：', loginRes.errMsg);
							uni.showToast({
								title: '登录状态异常',
								icon: 'none'
							});
						}
					},
					fail: (err) => {
						console.error('uni.login失败：', err);
						uni.showToast({
							title: '获取登录信息失败',
							icon: 'none'
						});
					}
				});
			}
		}
	}
</script>